package com.shujia.day10;

/*
    java中所有的类默认都有一个共同的父类：Object

    == 比较：
        1、比较的是两个基本数据类型的话，比较两个数值是否相等
        2、比较的是两个引用数据类型的话，比较的是两个对象的地址值是否相等

    成员方法：
        int hashCode() 返回对象的哈希码值。 可以看作地址值的另外一种表现形式
        public final Class getClass() 返回此 Object的运行时类。 获取当前类的class文件对象, 一个类全局只有一个在方法区中
        public String toString()
            打印一个对象名，默认调用的是类中的toString()方法
            若我们自己没有编写该方法的话，默认使用父类Object类中的toString()
            而父类中默认的toString()打印是一个地址值
            我们今后打印一个对象名的时候，输出是地址值意义不大，我们今后更多的是想看一个对象中成员变量值的情况
            要想实现上面的输出成员变量值的话，重写toString()方法，这样调用的就是自己重写后的toString()
            自动生成即可




 */

class Student{
    String name;
    int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

public class ObjectDemo1 {
    public static void main(String[] args) {
//        Student s1 = new Student();
//        Student s2 = new Student();
//
//        System.out.println(s1.hashCode());
//        System.out.println(s2.hashCode());
//
//        System.out.println(s1==s2);
//
//        Class c1 = s1.getClass();
//        System.out.println(c1.getName());

        Student s1 = new Student("李刚", 18);
//        System.out.println(s1.hashCode());
//        System.out.println(s1.getClass().getName() );
//        System.out.println(s1.toString()); // com.shujia.day10.Student@4554617c
        //this.getClass().getName() + "@" + Integer.toHexString(this.hashCode());

        System.out.println(s1.toString());
    }
}
